package cn.wizzer.app.onlyoffice.modules.models.documentServer;

import lombok.Data;

import java.util.HashMap;
import java.util.List;

@Data
public class EditorConfig {
    /**
     * 定义文档服务器接收到数据后，处理后进行回调接口【系统交换接口】
     * 。。。。
     */
    private String callbackUrl;
    // 文档共同编辑功能
    private HashMap<String, Object> coEditing = null;
    // 文档新建默认模板，搭配模板使用
    private String createUrl;
    private List<Template> templates;
    // 文档编辑器自定义界面
    private Customization customization;
    // 文档嵌入式功能
    private Embedded embedded;

    // 文档语言，默认中文即可无需跟改
    private String lang = "zh";
    // 文档打开模式
    private Mode mode = Mode.view;
    // 文档操作用户
    private User user;

    @Data
    public static class Customization {
        // 文档编辑器logo
        private Logo logo;
        // 文档编辑器打开文档位置
        private Goback goback;
        // 文档编辑器自动保存功能
        private Boolean autosave = false;
        // 文档编辑器Comments菜单按钮
        private Boolean comments = false;
        // 文档编辑器菜单显示在最上放
        private Boolean compactHeader = false;
        // 文档编辑器toolbar显示模式
        private Boolean compactToolbar = false;
        // 文档编辑器使用OOXML格式兼容的功能，开启会缺失注释功能
        private Boolean compatibleFeatures = false;
        // 文档编辑器中保存文档时即调用回调接口
        private Boolean forcesave = true;
        // 文档编辑器显示帮助功能
        private Boolean help = false;
        // 文档编辑器第一次进行隐藏右边菜单
        private Boolean hideRightMenu = false;
        // 文档编辑器隐藏尺子
        private Boolean hideRulers = false;
        // 文档编辑器隐藏Submit按钮
        private Boolean submitForm = false;

        private Boolean about = false;
        //反馈配置信息
        private Boolean feedback = false;

        private Customer customer;
        //定义当编辑器打开时是否自动运行文档宏。 默认值为 true。false值对用户隐藏宏设置。
        private Boolean macros = false;

        //定义启用自动开始时的宏运行模式
        private String macrosMode = "disable";

        //定义 插件 是否将启动并可用默认值为 true
        private Boolean plugins = false;

        //包含有关审阅模式的信息
        //private Review review;


        @Data
        public static class Logo {
            // 用户图片用于在通用工作模式（即所有编辑器的查看和编辑模式）或嵌入模式（请参阅 配置 部分以了解如何定义 嵌入 文档类型）中显示的图像文件的路径。 图片必须具有以下尺寸：172x40，172x40，
            private String image;
            //用于深色主题的图像文件的路径。 图片必须具有以下尺寸：172x40，172x40，
            private String imageDark;
            //  用于以嵌入模式显示的图像文件的路径（请参阅 配置 部分以了解如何定义 嵌入 文档类型）。 图片必须具有以下尺寸：248x40。 自 7.0 版起已弃用，请改用 图像 字段，
            private String imageEmbedded;
            // 点击时的跳转地址
            private String url;
            //显示或隐藏徽标。默认值为 true
            private Boolean visible = false;
        }

        @Data
        public static class Goback {
            private Boolean blank;

            private String text;
            // 文档开发文件位置
            private String url;

        }

        @Data
        public static class Customer{
            private String address; //允许访问编辑或编辑作者的公司或个人的邮政地址，
            private String info; //关于您希望其他人知道的公司或个人的一些附加信息
            private String logo; //图片 logo 的路径（这个文件没有特别推荐，但是如果是透明背景的 .png 格式会更好）。 图片必须具有以下尺寸：432x70
            private String logoDark ; //深色主题图像徽标的路径（此文件没有特别建议，但如果是透明背景的 .png 格式会更好）。 图片必须具有以下尺寸：432x70
            private String mail ; //允许访问编辑或编辑作者的公司或个人的电子邮件地址
            private String name ; //授予编辑或编辑作者访问权限的公司或个人的名称，
            private String phone; //允许访问编辑或编辑作者的公司或个人的电话，
            private String www ; //上述公司或个人的主页地址
        }
        /*@Data
        public static class Review{
            //显示模式 按钮是在 协作 选项卡上显示还是隐藏。 默认值为 false，
            private Boolean hideReviewDisplay=false;
            //定义评论显示模式：通过悬停更改（true） 在工具提示中显示评论，或者通过单击更改（false）在气球中显示评论。 默认值为 false。
            private Boolean hoverMode=false;
            //
            private Boolean reviewDisplay=false;
            //
            private Boolean hideReviewDisplay=false;
            //
            private Boolean hideReviewDisplay=false;
            //
            private Boolean hideReviewDisplay=false;
            //
            private Boolean hideReviewDisplay=false;
            //
            private Boolean hideReviewDisplay=false;
        }*/
    }

    @Data
    public static class Embedded {
        // 文档的绝对URL，作为嵌入文档的源文件
        private String embedUrl;
        // 允许文档保存到用户个人计算机上的绝对URL
        private String saveUrl;
        // 允许其他用户共享此文档的绝对URL
        private String shareUrl;
        // 嵌入查看器工具栏的位置可以在顶部或底部
        private String toolbarDocked;
    }


    public enum Mode {
        edit,
        view
    }

    @Data
    public static class User {
        private String id;
        private String name;
        private String group;
        private Boolean favorite;

        public void configure(int idParam, String nameParam, String groupParam) {
            this.id = "uid-" + idParam;
            this.name = nameParam;
            this.group = groupParam;
        }
    }

    @Data
    public static class Template {
        // 模板图标
        private String image;
        // 模板名称
        private String title;
        // 模板下载地址
        private String url;
    }



}
